package main

import (
	"fmt"
)

// 100个任务，同时只能执行10个，执行完这100个后再退出

func dosomething() {
	fmt.Println("hello")
}

func main() {

	ch1 := make(chan struct{}, 10)
	ch2 := make(chan struct{}, 100)

	for i := 0; i < 100; i++ {
		go func() {
			ch1 <- struct{}{}
			dosomething()
			<-ch1
			ch2 <- struct{}{}
		}()
	}

	for i := 0; i < 100; i++ {
		<-ch2
	}
	fmt.Println("done")

}
